package org.mfw.ddm.amp.mdc
{
	import flash.events.EventDispatcher;
	
	import org.mfw.ddm.amp.mdc.core.AMPConnector;
	import org.mfw.ddm.amp.mdc.event.AMPEvent;
	
	/**
	 * This class is a interface for the AMPConnector. So you
	 * can easy change the AMPConnectorclass.
	 * */
	
	public class AMPMediaConnectionManager extends EventDispatcher
	{
		
		protected var _ampConnector:AMPConnector; //Verbindung zum AmacheServer
		protected var _ready:Boolean; //Wird true wenn die Verbindung steht
		
		
		public function AMPMediaConnectionManager(key:String,url:String, destination:String="/server/xml.server.php")
		{
			this._ampConnector= new AMPConnector(key,url,destination); //initialisieren der Verbindung
			this._ampConnector.addEventListener(AMPEvent.AMP_RESULT,ampResult);	 //Eventlistener für Ergebnisse von Abfragen
			
		}
		
		/**
		 * Stellt die Verbindung zum Server her
		 * */
		public function connect():void{
			this._ampConnector.connect(); //Herstellen der Verbindung zum Server
		}
		
		/**
		 * Fügt eine neue Anfrage an den AmpacheServer zu
		 * */
		public function addRequest(ampFunc:String, filterText:String=null):Number {
			var requestObject:Object = new Object(); // Erstelle eine Anfrageobjekt
			requestObject.action = ampFunc; //legt die Aktion fest
			if (filterText){ requestObject.filter= filterText} // Wenn ein Filtertext vorliegt, dann füge diesen hinzu
			return this._ampConnector.addRequest(requestObject); //Reiche die Anfrage weiter und gib deren ID zurück
		}
		
		/**
		 * Wird ausgeführt wenn ein neues Ergebniss vom AmpacheServer kommt
		 * Wenn 
		 * */
		protected function ampResult(e:AMPEvent):void{
			//root : Ergebniss konnte zu Objekt geparst werden
			if (e.object.result.hasOwnProperty("root")){
				//Fehlermeldung vom AmpacheServer 
				if (e.object.result.root.hasOwnProperty("error")){
					 dispatchEvent(new AMPEvent(AMPEvent.AMP_ERROR,e.id,e.object.result));	
				} else {
					//Serveranfrage ok, liefere Ergebniss aus
					dispatchEvent(new AMPEvent(e.object.request.action,e.id,e.object.result));
				}
			} else if (e.object.result.hasOwnProperty("body")){
				dispatchEvent(new AMPEvent(e.object.request.action,e.id,e.object.result.body));
			}
			e=null;
		}
		

	}
}